﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Datos.SqlServer;


namespace Sistema_Totem.Logica.Clases
{

    /// <summary>
    /// Clase Base (padre) de todas las Plantillas del proyecto Totem-Ucab.
    /// </summary>

    public class Plantilla
    {
        private int id;
        private string nombre;
        private string descripcion;
        private string estatusActivado;
        //Lista de Secciones:
        //Lista de Secciones que pertenecen a la Plantilla:
        private List<Seccion> miListaSecciones = new List<Seccion>();
        //Lista de Elementos:
        //Lista de Elementos, los cuales no dependan de alguna SECCION:
        private List<Elemento> miListaElementos = new List<Elemento>();


        //Constructor:
        #region Constructores


        public Plantilla()
        {
            this.id = 0;
            this.nombre = "plantillaGenerica creada con costructor por defecto vacio";
            this.descripcion = "plantillaGenerica creada con costructor por defecto vacio";
            this.estatusActivado = "TRUE";

            //Lista de Secciones:   //this.miListaSecciones
            //Lista de Elementos:   //this.miListaElementos
            
        }

        
        public Plantilla(int id, string nombre)
        {
            this.id = id;
            this.nombre = nombre;
        }

        /// <summary>
        /// Constructor más recomendado:
        /// </summary>
        /// <param name="id"></param>
        /// <param name="nombre"></param>
        /// <param name="descripcion"></param>
        /// <param name="estatusActivado"></param>
        public Plantilla(int id, string nombre, string descripcion, string estatusActivado, List<Seccion> listaSecciones, List<Elemento> listaElementos)
        {
            this.id = id;
            this.nombre = nombre;
            this.descripcion = descripcion;
            this.estatusActivado = estatusActivado;

            //Lista de Secciones:
            this.miListaSecciones = listaSecciones;
            //Lista de Elementos:
            this.miListaElementos = listaElementos;


        }

        #endregion Constructores


        /// <summary>
        /// Gets y Sets:
        /// </summary>
        #region Encapsulamiento de Atributos

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public String Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }


        public List<Seccion> MiListaSecciones
        {
            get { return miListaSecciones; }
            set { miListaSecciones = value; }
        }


        public List<Elemento> MiListaElementos
        {
            get { return miListaElementos; }
            set { miListaElementos = value; }
        }


        #endregion Encapsulamiento de Atributos



        #region Metodo Equals

        public override bool Equals(object obj)
        {

            if (obj == null || GetType() != obj.GetType())
            {
                return false;
            }

            //Copia del objeto a Plantilla:
            Plantilla plantilla = (Plantilla)obj;

            //listas de secciones y elementos:
            //plantilla.miListaSecciones = new List<Seccion>();
            //plantilla.miListaElementos = new List<Elemento>();

            return (this.id == plantilla.id) && (this.nombre == plantilla.nombre) && (this.descripcion == plantilla.descripcion) && (this.estatusActivado == plantilla.estatusActivado) && (this.miListaSecciones.Equals(plantilla.miListaSecciones) &&  this.miListaElementos.Equals(plantilla.miListaSecciones));

        }//end public override bool Equals(object obj)

        #endregion Metodo Equals


        #region Metodos Plantilla

        public List<Plantilla> ListarPlantillasDeterminadas(int id_tp)
        {
            List<Plantilla> _plantillas = new List<Plantilla>();
            SqlServerPlantilla _ListaPlantilla = new SqlServerPlantilla();
            try
            {
                _plantillas = _ListaPlantilla.ConsultarTodasPlantillas(id_tp);

                return _plantillas;
            }
            catch (Exception e)
            {
                throw new Exception("No se pudo conectar a la base de datos", e);
            }
            
        }

    

        /// <summary>
        /// Metodo que Busca (por su nombre) una Sola Plantilla estilo catalogo (las que estan vacias por defecto); para pintarla en pantalla.
        /// </summary>
        /// <param name="nombrePlantilla"></param>
        /// <returns></returns>
        public Plantilla CargarPlantillaCatalogoDeBD( string nombrePlantilla )
        {

            SqlServerPlantilla _sqlSeverPlantilla = new SqlServerPlantilla();

            
            //Cargar datos generales de la plantilla:
            Plantilla miPlantilla = new Plantilla();
            /*
            miPlantilla = _sqlSeverPlantilla.cargarDatosPlantilla(nombrePlantilla);

            //Para contar el numero total de Elementos y componentes en la Plantilla particular:
            int numTotComponentesPlantilla = _sqlSeverPlantilla.CuentaComponentesPlantilla( nombrePlantilla );

            //numero de posicion u oren del componente de la Plantilla (Elemento u Seccion):
            int ordenI = 1;

            for (ordenI = 1; ordenI <= numTotComponentesPlantilla; ordenI++)
            {
                Seccion miSeccion = new Seccion();

              
                miPlantilla.miListaSecciones.LastOrDefault().MiListaElementos.Add(miElementoSiguienteEnSeccion);

                miPlantilla.miListaElementos.Add();    .miListaSecciones.LastOrDefault().MiListaElementos.Add(miElementoSiguienteEnSeccion);



            }//end for (ordenI = 1; ordenI <= numTotComponentesPlantilla; ordenI++)

            */
            return miPlantilla;

        }//end

        #endregion Metodos Plantilla
  }//Fin Clase Plantilla
}